↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PrologToPiTRSProof
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → U1_AG(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → U5_GAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → U5_AAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_AG(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_GA(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_GA(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGA(Y1s, Y2s, Ys)
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GAA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_AG(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_AG(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGG(Y1s, Y2s, Ys)
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGG(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGG(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → U1_AG(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → U5_GAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → U5_AAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_AG(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_GA(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_GA(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGA(Y1s, Y2s, Ys)
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GAA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_AG(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_AG(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGG(Y1s, Y2s, Ys)
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGG(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGG(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
MERGE_IN_GAA(.) → U6_GAA(=_in_aa)
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
=_in_aa → =_out_aa
=_in_aa
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
=_in_aa → =_out_aa
=_in_aa
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
=_in_aa
=_in_aa
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PrologToPiTRSProof
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PrologToPiTRSProof
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
↳ PrologToPiTRSProof
SPLIT_IN_AAA → SPLIT_IN_AAA
SPLIT_IN_AAA → SPLIT_IN_AAA
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PrologToPiTRSProof
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PrologToPiTRSProof
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
=_in_aa(X, X) → =_out_aa(X, X)
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ PrologToPiTRSProof
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U1_GA(split_out_gaa(X1s, X2s)) → MERGESORT_IN_GA(X1s)
U2_GA(X2s, mergesort_out_ga(Y1s)) → MERGESORT_IN_GA(X2s)
U1_GA(split_out_gaa(X1s, X2s)) → U2_GA(X2s, mergesort_in_ga(X1s))
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa([], y1)) → U2_GA(y1, mergesort_out_ga([]))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
U1_GA(split_out_gaa([], y1)) → U2_GA(y1, mergesort_out_ga([]))
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U1_GA(split_out_gaa(X1s, X2s)) → MERGESORT_IN_GA(X1s)
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U2_GA(X2s, mergesort_out_ga(Y1s)) → MERGESORT_IN_GA(X2s)
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ PrologToPiTRSProof
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U1_GA(split_out_gaa(X1s, X2s)) → MERGESORT_IN_GA(X1s)
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U2_GA(X2s, mergesort_out_ga(Y1s)) → MERGESORT_IN_GA(X2s)
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ PrologToPiTRSProof
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(X1s, X2s)) → MERGESORT_IN_GA(X1s)
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U2_GA(X2s, mergesort_out_ga(Y1s)) → MERGESORT_IN_GA(X2s)
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ PrologToPiTRSProof
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U2_GA(X2s, mergesort_out_ga(Y1s)) → MERGESORT_IN_GA(X2s)
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U2_GA(., mergesort_out_ga(x1)) → MERGESORT_IN_GA(.)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ PrologToPiTRSProof
U2_GA(., mergesort_out_ga(x1)) → MERGESORT_IN_GA(.)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ PrologToPiTRSProof
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U2_GA(., mergesort_out_ga(x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., y1)) → U2_GA(y1, mergesort_out_ga(.))
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., .)) → U2_GA(., mergesort_out_ga(.))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ NonTerminationProof
↳ PrologToPiTRSProof
U1_GA(split_out_gaa(., .)) → U2_GA(., mergesort_out_ga(.))
U2_GA(., mergesort_out_ga(x1)) → MERGESORT_IN_GA(.)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., .)) → U2_GA(., mergesort_out_ga(.))
U2_GA(., mergesort_out_ga(x1)) → MERGESORT_IN_GA(.)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
mergesort_in_ga([]) → mergesort_out_ga([])
mergesort_in_ga(.) → mergesort_out_ga(.)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., Zs)
U2_ga(X2s, mergesort_out_ga(Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Ys)) → mergesort_out_ga(Ys)
merge_in_gga([], Xs) → merge_out_gga(Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa) → merge_out_gga(.)
merge_in_gaa(Xs) → merge_out_gaa
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa) → merge_out_gaa
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → U1_AG(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → U5_GAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → U5_AAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_AG(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_GA(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_GA(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGA(Y1s, Y2s, Ys)
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GAA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_AG(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_AG(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGG(Y1s, Y2s, Ys)
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGG(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGG(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → U1_AG(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_AG(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → U5_GAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_GAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → U5_AAA(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_AG(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_AG(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → SPLIT_IN_GAA(.(X, .(Y, Xs)), X1s, X2s)
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_GA(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_GA(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U3_GA(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGA(Y1s, Y2s, Ys)
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GAA(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_AG(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U2_AG(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_AG(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
U3_AG(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → MERGE_IN_GGG(Y1s, Y2s, Ys)
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GGG(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
MERGE_IN_GGG(.(X, Xs), .(Y, Ys), .(X, Zs)) → =_IN_AA(X, Y)
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_GGG(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U6_GGG(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
U6_GAA(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → MERGE_IN_GAA(.(X, Xs), Ys, Zs)
MERGE_IN_GAA(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_GAA(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ PiDP
↳ PiDP
MERGE_IN_GAA(.) → U6_GAA(=_in_aa)
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
=_in_aa → =_out_aa
=_in_aa
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
=_in_aa → =_out_aa
=_in_aa
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ PiDP
↳ PiDP
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
=_in_aa
=_in_aa
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
↳ PiDP
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
U6_GAA(=_out_aa) → MERGE_IN_GAA(.)
MERGE_IN_GAA(.) → U6_GAA(=_out_aa)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
SPLIT_IN_AAA(.(X, Xs), .(X, Ys), Zs) → SPLIT_IN_AAA(Xs, Zs, Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
SPLIT_IN_AAA → SPLIT_IN_AAA
SPLIT_IN_AAA → SPLIT_IN_AAA
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
mergesort_in_ag([], []) → mergesort_out_ag([], [])
mergesort_in_ag(.(X, []), .(X, [])) → mergesort_out_ag(.(X, []), .(X, []))
mergesort_in_ag(.(X, .(Y, Xs)), Ys) → U1_ag(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa([], [], []) → split_out_gaa([], [], [])
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U1_ag(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ag(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
=_in_aa(X, X) → =_out_aa(X, X)
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
merge_in_gaa([], Xs, Xs) → merge_out_gaa([], Xs, Xs)
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
U2_ag(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ag(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
U3_ag(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ag(X, Y, Xs, Ys, merge_in_ggg(Y1s, Y2s, Ys))
merge_in_ggg([], Xs, Xs) → merge_out_ggg([], Xs, Xs)
merge_in_ggg(Xs, [], Xs) → merge_out_ggg(Xs, [], Xs)
merge_in_ggg(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_ggg(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_ggg(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_ggg(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_ggg(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_ggg(.(X, Xs), .(Y, Ys), .(X, Zs))
U4_ag(X, Y, Xs, Ys, merge_out_ggg(Y1s, Y2s, Ys)) → mergesort_out_ag(.(X, .(Y, Xs)), Ys)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_GA(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U1_GA(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → MERGESORT_IN_GA(X1s, Y1s)
MERGESORT_IN_GA(.(X, .(Y, Xs)), Ys) → U1_GA(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
U2_GA(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s, Y2s)
mergesort_in_ga([], []) → mergesort_out_ga([], [])
mergesort_in_ga(.(X, []), .(X, [])) → mergesort_out_ga(.(X, []), .(X, []))
mergesort_in_ga(.(X, .(Y, Xs)), Ys) → U1_ga(X, Y, Xs, Ys, split_in_gaa(.(X, .(Y, Xs)), X1s, X2s))
split_in_gaa(.(X, Xs), .(X, Ys), Zs) → U5_gaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U1_ga(X, Y, Xs, Ys, split_out_gaa(.(X, .(Y, Xs)), X1s, X2s)) → U2_ga(X, Y, Xs, Ys, X2s, mergesort_in_ga(X1s, Y1s))
U5_gaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(.(X, Xs), .(X, Ys), Zs)
U2_ga(X, Y, Xs, Ys, X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(X, Y, Xs, Ys, Y1s, mergesort_in_ga(X2s, Y2s))
split_in_aaa([], [], []) → split_out_aaa([], [], [])
split_in_aaa(.(X, Xs), .(X, Ys), Zs) → U5_aaa(X, Xs, Ys, Zs, split_in_aaa(Xs, Zs, Ys))
U3_ga(X, Y, Xs, Ys, Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(X, Y, Xs, Ys, merge_in_gga(Y1s, Y2s, Ys))
U5_aaa(X, Xs, Ys, Zs, split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(.(X, Xs), .(X, Ys), Zs)
U4_ga(X, Y, Xs, Ys, merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(.(X, .(Y, Xs)), Ys)
merge_in_gga([], Xs, Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, [], Xs) → merge_out_gga(Xs, [], Xs)
merge_in_gga(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gga(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gga(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gga(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
=_in_aa(X, X) → =_out_aa(X, X)
U7_gga(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gga(.(X, Xs), .(Y, Ys), .(X, Zs))
merge_in_gaa(Xs, [], Xs) → merge_out_gaa(Xs, [], Xs)
merge_in_gaa(.(X, Xs), .(Y, Ys), .(X, Zs)) → U6_gaa(X, Xs, Y, Ys, Zs, =_in_aa(X, Y))
U6_gaa(X, Xs, Y, Ys, Zs, =_out_aa(X, Y)) → U7_gaa(X, Xs, Y, Ys, Zs, merge_in_gaa(.(X, Xs), Ys, Zs))
U7_gaa(X, Xs, Y, Ys, Zs, merge_out_gaa(.(X, Xs), Ys, Zs)) → merge_out_gaa(.(X, Xs), .(Y, Ys), .(X, Zs))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
U2_GA(X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s)
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U1_GA(split_out_gaa(., X1s, X2s)) → MERGESORT_IN_GA(X1s)
U1_GA(split_out_gaa(., X1s, X2s)) → U2_GA(X2s, mergesort_in_ga(X1s))
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., [], y1)) → U2_GA(y1, mergesort_out_ga([], []))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
U1_GA(split_out_gaa(., [], y1)) → U2_GA(y1, mergesort_out_ga([], []))
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U2_GA(X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s)
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa(., X1s, X2s)) → MERGESORT_IN_GA(X1s)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
U2_GA(X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s)
MERGESORT_IN_GA(.) → U1_GA(split_in_gaa(.))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa(., X1s, X2s)) → MERGESORT_IN_GA(X1s)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U2_GA(X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s)
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa(., X1s, X2s)) → MERGESORT_IN_GA(X1s)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
U2_GA(X2s, mergesort_out_ga(X1s, Y1s)) → MERGESORT_IN_GA(X2s)
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U2_GA(., mergesort_out_ga(x1, x2)) → MERGESORT_IN_GA(.)
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U2_GA(., mergesort_out_ga(x1, x2)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., ., .)) → U2_GA(., mergesort_out_ga(., .))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., ., y1)) → U2_GA(y1, U1_ga(split_in_gaa(.)))
U1_GA(split_out_gaa(., ., .)) → U2_GA(., mergesort_out_ga(., .))
U2_GA(., mergesort_out_ga(x1, x2)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
U1_GA(split_out_gaa(., ., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
↳ Prolog
↳ PredefinedPredicateTransformerProof
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Narrowing
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ Narrowing
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ ForwardInstantiation
↳ QDP
↳ NonTerminationProof
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., ., .)) → U2_GA(., mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
U2_GA(., mergesort_out_ga(x1, x2)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)
mergesort_in_ga(x0)
split_in_gaa(x0)
U1_ga(x0)
U5_gaa(x0)
U2_ga(x0, x1)
split_in_aaa
U3_ga(x0, x1)
U5_aaa(x0)
U4_ga(x0)
merge_in_gga(x0, x1)
U6_gga(x0)
=_in_aa
U7_gga(x0)
merge_in_gaa(x0)
U6_gaa(x0)
U7_gaa(x0)
MERGESORT_IN_GA(.) → U1_GA(U5_gaa(split_in_aaa))
U1_GA(split_out_gaa(., ., x1)) → MERGESORT_IN_GA(.)
U1_GA(split_out_gaa(., ., .)) → U2_GA(., mergesort_out_ga(., .))
U1_GA(split_out_gaa(., ., .)) → U2_GA(., U1_ga(split_in_gaa(.)))
U2_GA(., mergesort_out_ga(x1, x2)) → MERGESORT_IN_GA(.)
mergesort_in_ga([]) → mergesort_out_ga([], [])
mergesort_in_ga(.) → mergesort_out_ga(., .)
mergesort_in_ga(.) → U1_ga(split_in_gaa(.))
split_in_gaa(.) → U5_gaa(split_in_aaa)
U1_ga(split_out_gaa(., X1s, X2s)) → U2_ga(X2s, mergesort_in_ga(X1s))
U5_gaa(split_out_aaa(Xs, Zs, Ys)) → split_out_gaa(., ., Zs)
U2_ga(X2s, mergesort_out_ga(X1s, Y1s)) → U3_ga(Y1s, mergesort_in_ga(X2s))
split_in_aaa → split_out_aaa([], [], [])
split_in_aaa → U5_aaa(split_in_aaa)
U3_ga(Y1s, mergesort_out_ga(X2s, Y2s)) → U4_ga(merge_in_gga(Y1s, Y2s))
U5_aaa(split_out_aaa(Xs, Zs, Ys)) → split_out_aaa(., ., Zs)
U4_ga(merge_out_gga(Y1s, Y2s, Ys)) → mergesort_out_ga(., Ys)
merge_in_gga([], Xs) → merge_out_gga([], Xs, Xs)
merge_in_gga(Xs, []) → merge_out_gga(Xs, [], Xs)
merge_in_gga(., .) → U6_gga(=_in_aa)
U6_gga(=_out_aa) → U7_gga(merge_in_gaa(.))
=_in_aa → =_out_aa
U7_gga(merge_out_gaa(.)) → merge_out_gga(., ., .)
merge_in_gaa(Xs) → merge_out_gaa(Xs)
merge_in_gaa(.) → U6_gaa(=_in_aa)
U6_gaa(=_out_aa) → U7_gaa(merge_in_gaa(.))
U7_gaa(merge_out_gaa(.)) → merge_out_gaa(.)